"""
  cookie      {1:{count:10,selected:True},3:{count:10,selected:True}}

    # 我们为了减少客户端和服务器的交互 先把redis数据一次(2条指令)获取到
    redis       {b'2':b'20',b'3':b'20'}   {3}

    合并
        以redis为主, redis的数据保证不怎么动
        如果cookie中有的数据,redis中没有,则可以添加
        如果cookie中有的数据,redis中有,则 数量以 cookie为主


    合并之后的:   {2:20,3:20}       []

                {2:20,3:10,1:10}       [1]



    再将最终的数据保存到redis中
                {2:20,3:10,1:10}       [1,3]

    合并之后cookie数据要删除

1.获取cookie信息
2.获取redis信息
3.做一个数据合并前的初始化(定义2个变量,一个是接收redis数据,另外一个是记录选中的id)
4.对cookie数据进行遍历,来合并到redis中
5.将合并之后的数据 保存到redis中
6.合并之后cookie数据要删除
"""

import pickle

import base64
from django_redis import get_redis_connection


def merge_cookie_to_redis(request,user,response):

    # 1.获取cookie信息
    cookie_str = request.COOKIES.get('cart')
    if cookie_str is not None:
        #说明有cart数据,我们对cart数据进行解密
        cookie_cart = pickle.loads(base64.b64decode(cookie_str))
        #  {1:{count:10,selected:True},3:{count:10,selected:True}}

        # 2.获取redis信息
        redis_conn = get_redis_connection('cart')
        # user = request.user
        sku_id_counts = redis_conn.hgetall('cart_%s'%user.id)

        # 3.做一个数据合并前的初始化(定义2个变量,一个是接收redis数据,另外一个是记录选中的id)
        selected_ids = []
        # 对redis数据进行转换 {b'2':b'20',b'3':b'20'}
        redis_count_ids = {}

        for sku_id,count in sku_id_counts.items():
            redis_count_ids[int(sku_id)]=int(count)

        # redis_count_ids = {2:20,3:20}
        # 4.对cookie数据进行遍历,来合并到redis中
        for sku_id,count_selected in cookie_cart.items():
            #1:{count:10,selected:True}
            #3:{count:10,selected:True}
            if sku_id in redis_count_ids:
                # 商品id 和redis的id重复 ,重复的id,个数以cookie为主
                redis_count_ids[sku_id]=count_selected['count']
            else:
                redis_count_ids[sku_id]=count_selected['count']

            # 把选中状态获取出来
            if count_selected['selected']:
                selected_ids.append(sku_id)

        # 5.将合并之后的数据 保存到redis中
        # redis_count_ids = {2:20,3:10,1:10}
        # selected_ids =  [1,3]
        # 保存多个hash数据
        redis_conn.hmset('cart_%s'%user.id,redis_count_ids)
        # 保存 set数据
        # *selected_ids 解包列表 一个一个添加
        redis_conn.sadd('cart_selected_%s'%user.id,*selected_ids)
        # 6.合并之后cookie数据要删除
        response.delete_cookie('cart')

        return response
    else:
        return response

# import pickle
# import base64
# from django_redis import get_redis_connection
#
# def merge_cookie_to_redis(request,user,response):
#     cookie_str = request.COOKIES.get('cart')
#     if cookie_str is not None:
#         cookie